/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gradehorario;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 *
 * @author rafaelneri
 * 
 * Representa um comprador capaz de participar de um Leilao
 */
public class Comprador {
    public String _id;
    public float _credito;
    private HashMap<Item, Lance> _lances;
    private ArrayList<Item> _itensComprados;
    private float MAX_LAN = 0.3f;
    
    public Comprador(String id){
        this._id = id;
        this._lances = new HashMap<Item, Lance>();
        this._itensComprados = new ArrayList<Item>();
        this._credito = this.gerarCredito();
    }
    
    private float gerarPercentualLance(double maximoAcrescimo)
    {
        float _percentualLance = 0;
        
        do{
            _percentualLance = (float) Math.random();
        }while(_percentualLance>maximoAcrescimo);
        
        this.MAX_LAN = _percentualLance;
        
        return _percentualLance;
    }
        
    public Lance ofertarLance(Item item){
        float valorLance = item.getPreco() * (gerarPercentualLance(MAX_LAN)+1);
        if(this._credito >= valorLance){
            Lance lance = new Lance(this, valorLance);
            if(this._lances.containsKey(item)){
                this._lances.remove(item);
            }
            this._lances.put(item, lance);
            return lance;
        }
        /*
         * O usuário não irá efetuar nenhum lance
         * DECIDIR SE ISTO SIGNIFICA DECLINAR DO LEILÃO
         */
        return null;
    }

    private float gerarCredito() {
        return (float)(100*(1+Math.random()));
    }
    
    public void comprarItem(Item item){
        this._credito -= item.getPreco();
        this._itensComprados.add(item);
    }
    
    public void recusarItem(Item item){
        this._lances.remove(item);
    }
    
    public String getId()
    {
        return this._id;
    }
    
    public float getCredito()
    {
        return this._credito;
    }

    @Override
    public String toString() 
    {
        return this._id;
    }
    
    public HashMap<Item, Lance> getLances()
    {
        return _lances;
    }
    
    public List<Item> getItensComprados()
    {
        return _itensComprados;
    }
}
